home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / biblio / bibtex / contrib / these.bst < prev    next >
Text File  |  1993-11-24  |  22KB  |  1,253 lines

  1. %
  2. % Style de bibliographie pour the`se - d'apres alpha.bst
  3. %
  4. % Matthieu Herrb (matthieu@laas.fr) - Juillet 89, Octobre 90
  5. %
  6. %        Les references seront designees tant dans le texte que dans
  7. % la liste recapitulative (ordonnee suivant l'ordre alphabetique du nom
  8. % du premier auteur), par le nom du premier auteur suivi des deux
  9. % derniers chiffres de l'annee de publication, le tout entre crochets.
  10. % Si deux references du meme auteur se rapportent a la meme annee, elles
  11. % seront differenciees par des lettres minuscules (a, b, etc.)
  12. %
  13.  
  14.     % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  15.     % Copyright (C) 1985, all rights reserved.
  16.     % Copying of this file is authorized only if either
  17.     % (1) you make absolutely no changes to your copy, including name, or
  18.     % (2) if you do make changes, you name it something other than
  19.     % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  20.     % This restriction helps ensure that all standard styles are identical.
  21.  
  22. ENTRY
  23.   { address
  24.     author
  25.     booktitle
  26.     chapter
  27.     edition
  28.     editor
  29.     howpublished
  30.     institution
  31.     journal
  32.     key
  33.     month
  34.     note
  35.     number
  36.     organization
  37.     pages
  38.     publisher
  39.     school
  40.     series
  41.     title
  42.     type
  43.     volume
  44.     year
  45.   }
  46.   {}
  47.   { label extra.label sort.label }
  48.  
  49. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  50.  
  51. FUNCTION {init.state.consts}
  52. { #0 'before.all :=
  53.   #1 'mid.sentence :=
  54.   #2 'after.sentence :=
  55.   #3 'after.block :=
  56. }
  57.  
  58. STRINGS { s t }
  59.  
  60. FUNCTION {output.nonnull}
  61. { 's :=
  62.   output.state mid.sentence =
  63.     { ", " * write$ }
  64.     { output.state after.block =
  65.     { add.period$ write$
  66.       newline$
  67.       "\newblock " write$
  68.     }
  69.     { output.state before.all =
  70.         'write$
  71.         { add.period$ " " * write$ }
  72.       if$
  73.     }
  74.       if$
  75.       mid.sentence 'output.state :=
  76.     }
  77.   if$
  78.   s
  79. }
  80.  
  81. FUNCTION {output}
  82. { duplicate$ empty$
  83.     'pop$
  84.     'output.nonnull
  85.   if$
  86. }
  87.  
  88. FUNCTION {output.check}
  89. { 't :=
  90.   duplicate$ empty$
  91.     { pop$ "empty " t * " in " * cite$ * warning$ }
  92.     'output.nonnull
  93.   if$
  94. }
  95.  
  96. FUNCTION {output.bibitem}
  97. { newline$
  98.   "\bibitem[" write$
  99.   label write$
  100.   "]{" write$
  101.   cite$ write$
  102.   "}" write$
  103.   newline$
  104.   ""
  105.   before.all 'output.state :=
  106. }
  107.  
  108. FUNCTION {fin.entry}
  109. { add.period$
  110.   write$
  111.   newline$
  112. }
  113.  
  114. FUNCTION {new.block}
  115. { output.state before.all =
  116.     'skip$
  117.     { after.block 'output.state := }
  118.   if$
  119. }
  120.  
  121. FUNCTION {new.sentence}
  122. { output.state after.block =
  123.     'skip$
  124.     { output.state before.all =
  125.     'skip$
  126.     { after.sentence 'output.state := }
  127.       if$
  128.     }
  129.   if$
  130. }
  131.  
  132. FUNCTION {not}
  133. {   { #0 }
  134.     { #1 }
  135.   if$
  136. }
  137.  
  138. FUNCTION {and}
  139. {   'skip$
  140.     { pop$ #0 }
  141.   if$
  142. }
  143.  
  144. FUNCTION {or}
  145. {   { pop$ #1 }
  146.     'skip$
  147.   if$
  148. }
  149.  
  150. FUNCTION {new.block.checka}
  151. { empty$
  152.     'skip$
  153.     'new.block
  154.   if$
  155. }
  156.  
  157. FUNCTION {new.block.checkb}
  158. { empty$
  159.   swap$ empty$
  160.   and
  161.     'skip$
  162.     'new.block
  163.   if$
  164. }
  165.  
  166. FUNCTION {new.sentence.checka}
  167. { empty$
  168.     'skip$
  169.     'new.sentence
  170.   if$
  171. }
  172.  
  173. FUNCTION {new.sentence.checkb}
  174. { empty$
  175.   swap$ empty$
  176.   and
  177.     'skip$
  178.     'new.sentence
  179.   if$
  180. }
  181.  
  182. FUNCTION {field.or.null}
  183. { duplicate$ empty$
  184.     { pop$ "" }
  185.     'skip$
  186.   if$
  187. }
  188.  
  189. FUNCTION {emphasize}
  190. { duplicate$ empty$
  191.     { pop$ "" }
  192.     { "{\em " swap$ * "}" * }
  193.   if$
  194. }
  195.  
  196. FUNCTION {scapify}
  197. { duplicate$ empty$
  198.     { pop$ "" }
  199.     { "{\sc " swap$ * "}" * }
  200.   if$
  201. }
  202.  
  203. FUNCTION {underline}
  204. { duplicate$ empty$
  205.     { pop$ "" }
  206.     { "{\ul " swap$ * "}" * }
  207.   if$
  208. }
  209.  
  210. INTEGERS { nameptr namesleft numnames }
  211.  
  212. FUNCTION {format.names}
  213. { 's :=
  214.   #1 'nameptr :=
  215.   s num.names$ 'numnames :=
  216.   numnames 'namesleft :=
  217.     { namesleft #0 > }
  218.     { s nameptr "{ff~}{vv~}{ll}{~jj}" format.name$ 't :=
  219.       nameptr #1 >
  220.     { namesleft #1 >
  221.         { ", " * t * }
  222.         { numnames #2 >
  223.         { "" * }
  224.         'skip$
  225.           if$
  226.           t "others" =
  227.         { " et~al." emphasize * }
  228.         { " \& " * t * }
  229.           if$
  230.         }
  231.       if$
  232.     }
  233.     't
  234.       if$
  235.       nameptr #1 + 'nameptr :=
  236.       namesleft #1 - 'namesleft :=
  237.     }
  238.   while$
  239. }
  240.  
  241. FUNCTION {format.authors}
  242. { author empty$
  243.     { "" }
  244.     { author format.names }
  245.   if$
  246. }
  247.  
  248. FUNCTION {format.editors}
  249. { editor empty$
  250.     { "" }
  251.     { editor format.names
  252.       editor num.names$ #1 >
  253.     { ", editeurs" * }
  254.     { ", editeur" * }
  255.       if$
  256.     }
  257.   if$
  258. }
  259.  
  260. FUNCTION {format.title}
  261. { title empty$
  262.     { "" }
  263.     { title "t" change.case$ }
  264.   if$
  265. }
  266.  
  267. FUNCTION {n.dashify}
  268. { 't :=
  269.   ""
  270.     { t empty$ not }
  271.     { t #1 #1 substring$ "-" =
  272.     { t #1 #2 substring$ "--" = not
  273.         { "--" *
  274.           t #2 global.max$ substring$ 't :=
  275.         }
  276.         {   { t #1 #1 substring$ "-" = }
  277.         { "-" *
  278.           t #2 global.max$ substring$ 't :=
  279.         }
  280.           while$
  281.         }
  282.       if$
  283.     }
  284.     { t #1 #1 substring$ *
  285.       t #2 global.max$ substring$ 't :=
  286.     }
  287.       if$
  288.     }
  289.   while$
  290. }
  291.  
  292. FUNCTION {format.date}
  293. { year empty$
  294.     { month empty$
  295.     { "" }
  296.     { "there's a month but no year in " cite$ * warning$
  297.       month
  298.     }
  299.       if$
  300.     }
  301.     { month empty$
  302.     'year
  303.     { month " " * year * }
  304.       if$
  305.     }
  306.   if$
  307. }
  308.  
  309. FUNCTION {format.btitle}
  310. { title emphasize
  311. }
  312.  
  313. FUNCTION {format.utitle}
  314. { title emphasize
  315. }
  316.  
  317. FUNCTION {tie.or.space.connect}
  318. { duplicate$ text.length$ #3 <
  319.     { "~" }
  320.     { " " }
  321.   if$
  322.   swap$ * *
  323. }
  324.  
  325. FUNCTION {either.or.check}
  326. { empty$
  327.     'pop$
  328.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  329.   if$
  330. }
  331.  
  332. FUNCTION {format.bvolume}
  333. { volume empty$
  334.     { "" }
  335.     { "volume" volume tie.or.space.connect
  336.       series empty$
  337.     'skip$
  338.     { " of " * series emphasize * }
  339.       if$
  340.       "volume and number" number either.or.check
  341.     }
  342.   if$
  343. }
  344.  
  345. FUNCTION {format.number.series}
  346. { volume empty$
  347.     { number empty$
  348.     { series field.or.null }
  349.     { output.state mid.sentence =
  350.         { "num\'ero" }
  351.         { "Nume\'ero" }
  352.       if$
  353.       number tie.or.space.connect
  354.       series empty$
  355.         { "there's a number but no series in " cite$ * warning$ }
  356.         { " in " * series * }
  357.       if$
  358.     }
  359.       if$
  360.     }
  361.     { "" }
  362.   if$
  363. }
  364.  
  365. FUNCTION {format.edition}
  366. { edition empty$
  367.     { "" }
  368.     { output.state mid.sentence =
  369.     { edition "l" change.case$ " edition" * }
  370.     { edition "t" change.case$ " edition" * }
  371.       if$
  372.     }
  373.   if$
  374. }
  375.  
  376. INTEGERS { multiresult }
  377.  
  378. FUNCTION {multi.page.check}
  379. { 't :=
  380.   #0 'multiresult :=
  381.     { multiresult not
  382.       t empty$ not
  383.       and
  384.     }
  385.     { t #1 #1 substring$
  386.       duplicate$ "-" =
  387.       swap$ duplicate$ "," =
  388.       swap$ "+" =
  389.       or or
  390.     { #1 'multiresult := }
  391.     { t #2 global.max$ substring$ 't := }
  392.       if$
  393.     }
  394.   while$
  395.   multiresult
  396. }
  397.  
  398. FUNCTION {format.pages}
  399. { pages empty$
  400.     { "" }
  401.     { pages multi.page.check
  402.     { "pages" pages n.dashify tie.or.space.connect }
  403.     { "page" pages tie.or.space.connect }
  404.       if$
  405.     }
  406.   if$
  407. }
  408.  
  409.  
  410. FUNCTION {format.volume}
  411. { volume empty$
  412.     { "" }
  413.     { "vol.~" volume * }
  414.   if$
  415. }
  416.  
  417. FUNCTION {format.number}
  418. { number empty$
  419.     { "" }
  420.     { "no.~" number * }
  421.   if$
  422. }
  423.  
  424. FUNCTION {format.chapter.pages}
  425. { chapter empty$
  426.     'format.pages
  427.     { type empty$
  428.     { "chapitre" }
  429.     { type "l" change.case$ }
  430.       if$
  431.       chapter tie.or.space.connect
  432.       pages empty$
  433.     'skip$
  434.     { ", " * format.pages * }
  435.       if$
  436.     }
  437.   if$
  438. }
  439.  
  440. FUNCTION {format.in.ed.booktitle}
  441. { booktitle empty$
  442.     { "" }
  443.     { editor empty$
  444.     { "In " booktitle * }
  445.     { "In " format.editors * ", " * booktitle * }
  446.       if$
  447.     }
  448.   if$
  449. }
  450.  
  451. FUNCTION {empty.misc.check}
  452. { author empty$ title empty$ howpublished empty$
  453.   month empty$ year empty$ note empty$
  454.   and and and and and
  455.   key empty$ not and
  456.     { "all relevant fields are empty in " cite$ * warning$ }
  457.     'skip$
  458.   if$
  459. }
  460.  
  461. FUNCTION {format.thesis.type}
  462. { type empty$
  463.     'skip$
  464.     { pop$
  465.       type "t" change.case$
  466.     }
  467.   if$
  468. }
  469.  
  470. FUNCTION {format.tr.number}
  471. { type empty$
  472.     { "Rapport technique" }
  473.     'type
  474.   if$
  475.   number empty$
  476.     { "t" change.case$ }
  477.     { number tie.or.space.connect }
  478.   if$
  479. }
  480.  
  481. FUNCTION {format.article.crossref}
  482. { key empty$
  483.     { journal empty$
  484.     { "need key or journal for " cite$ * " to crossref " * crossref *
  485.       warning$
  486.       ""
  487.     }
  488.     { "In {\em " journal * "\/}" * }
  489.       if$
  490.     }
  491.     { "In " key * }
  492.   if$
  493.   " \cite{" * crossref * "}" *
  494. }
  495.  
  496. FUNCTION {format.crossref.editor}
  497. { editor #1 "{vv~}{ll}" format.name$
  498.   editor num.names$ duplicate$
  499.   #2 >
  500.     { pop$ " et~al." * }
  501.     { #2 <
  502.     'skip$
  503.     { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  504.         { " et~al." * }
  505.         { " \& " * editor #2 "{vv~}{ll}" format.name$ * }
  506.       if$
  507.     }
  508.       if$
  509.     }
  510.   if$
  511. }
  512.  
  513. FUNCTION {format.book.crossref}
  514. { volume empty$
  515.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  516.       "In "
  517.     }
  518.     { "Volume" volume tie.or.space.connect
  519.       " of " *
  520.     }
  521.   if$
  522.   editor empty$
  523.   editor field.or.null author field.or.null =
  524.   or
  525.     { key empty$
  526.     { series empty$
  527.         { "need editor, key, or series for " cite$ * " to crossref " *
  528.           crossref * warning$
  529.           "" *
  530.         }
  531.         { "{\em " * series * "\/}" * }
  532.       if$
  533.     }
  534.     { key * }
  535.       if$
  536.     }
  537.     { format.crossref.editor * }
  538.   if$
  539.   " \cite{" * crossref * "}" *
  540. }
  541.  
  542. FUNCTION {format.incoll.inproc.crossref}
  543. { editor empty$
  544.   editor field.or.null author field.or.null =
  545.   or
  546.     { booktitle empty$
  547.         { key empty$
  548.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  549.           crossref * warning$
  550.           ""
  551.         }
  552.         { "In " key * }
  553.       if$
  554.     }
  555.     { "In " booktitle * }
  556.       if$
  557.     }
  558.     { "In " format.crossref.editor * }
  559.   if$
  560.   " \cite{" * crossref * "}" *
  561. }
  562.  
  563. FUNCTION {article}
  564. { output.bibitem
  565.   format.authors "author" output.check
  566.   new.block
  567.   format.utitle "title" output.check
  568.   new.block
  569.   crossref missing$
  570.     { journal "journal" output.check
  571.       format.volume output
  572.       format.number output 
  573.       format.pages output
  574.       format.date "year" output.check
  575.     }
  576.     { format.article.crossref output.nonnull
  577.       format.pages output
  578.     }
  579.   if$
  580.   new.block
  581.   note output
  582.   fin.entry
  583. }
  584.  
  585. FUNCTION {book}
  586. { output.bibitem
  587.   author empty$
  588.     { format.editors "author and editor" output.check }
  589.     { format.authors output.nonnull
  590.       crossref missing$
  591.     { "author and editor" editor either.or.check }
  592.     'skip$
  593.       if$
  594.     }
  595.   if$
  596.   new.block
  597.   format.title "title" output.check
  598.   crossref missing$
  599.     { format.bvolume output
  600.       new.block
  601.       format.number.series output
  602.       new.sentence
  603.       publisher "publisher" output.check
  604.       address output
  605.     }
  606.     { new.block
  607.       format.book.crossref output.nonnull
  608.     }
  609.   if$
  610.   format.edition output
  611.   format.date "year" output.check
  612.   new.block
  613.   note output
  614.   fin.entry
  615. }
  616.  
  617. FUNCTION {booklet}
  618. { output.bibitem
  619.   format.authors output
  620.   new.block
  621.   format.title "title" output.check
  622.   howpublished address new.block.checkb
  623.   howpublished output
  624.   address output
  625.   format.date output
  626.   new.block
  627.   note output
  628.   fin.entry
  629. }
  630.  
  631. FUNCTION {inbook}
  632. { output.bibitem
  633.   author empty$
  634.     { format.editors "author and editor" output.check }
  635.     { format.authors output.nonnull
  636.       crossref missing$
  637.     { "author and editor" editor either.or.check }
  638.     'skip$
  639.       if$
  640.     }
  641.   if$
  642.   new.block
  643.   format.title "title" output.check
  644.   crossref missing$
  645.     { format.bvolume output
  646.       format.chapter.pages "chapter and pages" output.check
  647.       new.block
  648.       format.number.series output
  649.       new.sentence
  650.       publisher "publisher" output.check
  651.       address output
  652.     }
  653.     { format.chapter.pages "chapter and pages" output.check
  654.       new.block
  655.       format.book.crossref output.nonnull
  656.     }
  657.   if$
  658.   format.edition output
  659.   format.date "year" output.check
  660.   new.block
  661.   note output
  662.   fin.entry
  663. }
  664.  
  665. FUNCTION {incollection}
  666. { output.bibitem
  667.   format.authors "author" output.check
  668.   new.block
  669.   format.utitle "title" output.check
  670.   new.block
  671.   crossref missing$
  672.     { format.in.ed.booktitle "booktitle" output.check
  673.       format.bvolume output
  674.       format.number.series output
  675.       format.chapter.pages output
  676.       new.sentence
  677.       publisher "publisher" output.check
  678.       address output
  679.       format.edition output
  680.       format.date "year" output.check
  681.     }
  682.     { format.incoll.inproc.crossref output.nonnull
  683.       format.chapter.pages output
  684.     }
  685.   if$
  686.   new.block
  687.   note output
  688.   fin.entry
  689. }
  690.  
  691. FUNCTION {inproceedings}
  692. { output.bibitem
  693.   format.authors "author" output.check
  694.   new.block
  695.   format.utitle "title" output.check
  696.   new.block
  697.   crossref missing$
  698.     { format.in.ed.booktitle "booktitle" output.check
  699.       format.bvolume output
  700.       format.number.series output
  701.       format.pages output
  702.       address empty$
  703.     { organization publisher new.sentence.checkb
  704.       organization output
  705.       publisher output
  706.       format.date "year" output.check
  707.     }
  708.     { address output.nonnull
  709.       format.date "year" output.check
  710.       new.sentence
  711.       organization output
  712.       publisher output
  713.     }
  714.       if$
  715.     }
  716.     { format.incoll.inproc.crossref output.nonnull
  717.       format.pages output
  718.     }
  719.   if$
  720.   new.block
  721.   note output
  722.   fin.entry
  723. }
  724.  
  725. FUNCTION {conference} { inproceedings }
  726.  
  727. FUNCTION {manual}
  728. { output.bibitem
  729.   author empty$
  730.     { organization empty$
  731.     'skip$
  732.     { organization output.nonnull
  733.       address output
  734.     }
  735.       if$
  736.     }
  737.     { format.authors output.nonnull }
  738.   if$
  739.   new.block
  740.   format.utitle "title" output.check
  741.   author empty$
  742.     { organization empty$
  743.     { address new.block.checka
  744.       address output
  745.     }
  746.     'skip$
  747.       if$
  748.     }
  749.     { organization address new.block.checkb
  750.       organization output
  751.       address output
  752.     }
  753.   if$
  754.   format.edition output
  755.   format.date output
  756.   new.block
  757.   note output
  758.   fin.entry
  759. }
  760.  
  761. FUNCTION {mastersthesis}
  762. { output.bibitem
  763.   format.authors "author" output.check
  764.   new.block
  765.   format.title "title" output.check
  766.   new.block
  767.   "Master's thesis" format.thesis.type output.nonnull
  768.   school "school" output.check
  769.   address output
  770.   format.date "year" output.check
  771.   new.block
  772.   note output
  773.   fin.entry
  774. }
  775.  
  776. FUNCTION {misc}
  777. { output.bibitem
  778.   format.authors output
  779.   title howpublished new.block.checkb
  780.   format.utitle output
  781.   howpublished new.block.checka
  782.   howpublished output
  783.   format.date output
  784.   new.block
  785.   note output
  786.   fin.entry
  787.   empty.misc.check
  788. }
  789.  
  790. FUNCTION {phdthesis}
  791. { output.bibitem
  792.   format.authors "author" output.check
  793.   new.block
  794.   format.btitle "title" output.check
  795.   new.block
  796.   "PhD thesis" format.thesis.type output.nonnull
  797.   school "school" output.check
  798.   address output
  799.   format.date "year" output.check
  800.   new.block
  801.   note output
  802.   fin.entry
  803. }
  804.  
  805. FUNCTION {proceedings}
  806. { output.bibitem
  807.   editor empty$
  808.     { organization output }
  809.     { format.editors output.nonnull }
  810.   if$
  811.   new.block
  812.   format.title "title" output.check
  813.   format.bvolume output
  814.   format.number.series output
  815.   address empty$
  816.     { editor empty$
  817.     { publisher new.sentence.checka }
  818.     { organization publisher new.sentence.checkb
  819.       organization output
  820.     }
  821.       if$
  822.       publisher output
  823.       format.date "year" output.check
  824.     }
  825.     { address output.nonnull
  826.       format.date "year" output.check
  827.       new.sentence
  828.       editor empty$
  829.     'skip$
  830.     { organization output }
  831.       if$
  832.       publisher output
  833.     }
  834.   if$
  835.   new.block
  836.   note output
  837.   fin.entry
  838. }
  839.  
  840. FUNCTION {techreport}
  841. { output.bibitem
  842.   format.authors "author" output.check
  843.   new.block
  844.   format.utitle "title" output.check
  845.   new.block
  846.   format.tr.number output.nonnull
  847.   institution "institution" output.check
  848.   address output
  849.   format.date "year" output.check
  850.   new.block
  851.   note output
  852.   fin.entry
  853. }
  854.  
  855. FUNCTION {unpublished}
  856. { output.bibitem
  857.   format.authors "author" output.check
  858.   new.block
  859.   format.title "title" output.check
  860.   new.block
  861.   note "note" output.check
  862.   format.date output
  863.   fin.entry
  864. }
  865.  
  866. FUNCTION {default.type} { misc }
  867.  
  868. MACRO {jan} {"January"}
  869.  
  870. MACRO {feb} {"February"}
  871.  
  872. MACRO {mar} {"March"}
  873.  
  874. MACRO {apr} {"April"}
  875.  
  876. MACRO {may} {"May"}
  877.  
  878. MACRO {jun} {"June"}
  879.  
  880. MACRO {jul} {"July"}
  881.  
  882. MACRO {aug} {"August"}
  883.  
  884. MACRO {sep} {"September"}
  885.  
  886. MACRO {oct} {"October"}
  887.  
  888. MACRO {nov} {"November"}
  889.  
  890. MACRO {dec} {"December"}
  891.  
  892. MACRO {acmcs} {"ACM Computing Surveys"}
  893.  
  894. MACRO {acta} {"Acta Informatica"}
  895.  
  896. MACRO {cacm} {"Communications of the ACM"}
  897.  
  898. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  899.  
  900. MACRO {ibmsj} {"IBM Systems Journal"}
  901.  
  902. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  903.  
  904. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  905.  
  906. MACRO {ieeetcad}
  907.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  908.  
  909. MACRO {ipl} {"Information Processing Letters"}
  910.  
  911. MACRO {jacm} {"Journal of the ACM"}
  912.  
  913. MACRO {jcss} {"Journal of Computer and System Sciences"}
  914.  
  915. MACRO {scp} {"Science of Computer Programming"}
  916.  
  917. MACRO {sicomp} {"SIAM Journal on Computing"}
  918.  
  919. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  920.  
  921. MACRO {tods} {"ACM Transactions on Database Systems"}
  922.  
  923. MACRO {tog} {"ACM Transactions on Graphics"}
  924.  
  925. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  926.  
  927. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  928.  
  929. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  930.  
  931. MACRO {tcs} {"Theoretical Computer Science"}
  932.  
  933. READ
  934.  
  935. FUNCTION {sortify}
  936. { purify$
  937.   "l" change.case$
  938. }
  939.  
  940. INTEGERS { len }
  941.  
  942. FUNCTION {chop.word}
  943. { 's :=
  944.   'len :=
  945.   s #1 len substring$ =
  946.     { s len #1 + global.max$ substring$ }
  947.     's
  948.   if$
  949. }
  950.  
  951. INTEGERS { et.al.char.used }
  952.  
  953. FUNCTION {initialize.et.al.char.used}
  954. { #0 'et.al.char.used :=
  955. }
  956.  
  957. EXECUTE {initialize.et.al.char.used}
  958.  
  959. %
  960. % Cette function produit le label avec le nom du premier auteur
  961. %
  962. FUNCTION {format.lab.names}
  963. { 's :=
  964.   s #1 "{vv }{ll}" format.name$
  965. }
  966.  
  967. FUNCTION {author.key.label}
  968. { author empty$
  969.     { key empty$
  970.     { cite$ #1 #3 substring$ }
  971.     { key #3 }
  972.       if$
  973.     }
  974.     { author format.lab.names }
  975.   if$
  976. }
  977.  
  978. FUNCTION {author.editor.key.label}
  979. { author empty$
  980.     { editor empty$
  981.     { key empty$
  982.         { cite$ #1 #3 substring$ }
  983.         { key }
  984.       if$
  985.     }
  986.     { editor format.lab.names }
  987.       if$
  988.     }
  989.     { author format.lab.names }
  990.   if$
  991. }
  992.  
  993. FUNCTION {author.key.organization.label}
  994. { author empty$
  995.     { key empty$
  996.     { organization empty$
  997.         { cite$ #1 #3 substring$ }
  998.         { "The " #4 organization chop.word #3 text.prefix$ }
  999.       if$
  1000.     }
  1001.     { key }
  1002.       if$
  1003.     }
  1004.     { author format.lab.names }
  1005.   if$
  1006. }
  1007.  
  1008. FUNCTION {editor.key.organization.label}
  1009. { editor empty$
  1010.     { key empty$
  1011.     { organization empty$
  1012.         { cite$ #1 #3 substring$ }
  1013.         { "The " #4 organization chop.word #3 text.prefix$ }
  1014.       if$
  1015.     }
  1016.     { key }
  1017.       if$
  1018.     }
  1019.     { editor format.lab.names }
  1020.   if$
  1021. }
  1022.  
  1023. %
  1024. % Fonction modifiee pour generer les bons labels
  1025. FUNCTION {calc.label}
  1026. { type$ "book" =
  1027.   type$ "inbook" =
  1028.   or
  1029.     'author.editor.key.label
  1030.     { type$ "proceedings" =
  1031.     'editor.key.organization.label
  1032.     { type$ "manual" =
  1033.         'author.key.organization.label
  1034.         'author.key.label
  1035.       if$
  1036.     }
  1037.       if$
  1038.     }
  1039.   if$
  1040.   duplicate$
  1041.   "~" *
  1042.   year #-1 #2 substring$ field.or.null purify$ *
  1043.   'label :=
  1044.   year #-1 #4 substring$ field.or.null purify$ 
  1045.   *
  1046.   sortify 'sort.label :=
  1047. }
  1048.  
  1049. FUNCTION {sort.format.names}
  1050. { 's :=
  1051.   #1 'nameptr :=
  1052.   ""
  1053.   s num.names$ 'numnames :=
  1054.   numnames 'namesleft :=
  1055.     { namesleft #0 > }
  1056.     { nameptr #1 >
  1057.     { "   " * }
  1058.     'skip$
  1059.       if$
  1060.       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
  1061.       nameptr numnames = t "others" = and
  1062.     { "et al" * }
  1063.     { t sortify * }
  1064.       if$
  1065.       nameptr #1 + 'nameptr :=
  1066.       namesleft #1 - 'namesleft :=
  1067.     }
  1068.   while$
  1069. }
  1070.  
  1071. FUNCTION {sort.format.title}
  1072. { 't :=
  1073.   "A " #2
  1074.     "An " #3
  1075.       "The " #4 t chop.word
  1076.     chop.word
  1077.   chop.word
  1078.   sortify
  1079.   #1 global.max$ substring$
  1080. }
  1081.  
  1082. FUNCTION {author.sort}
  1083. { author empty$
  1084.     { key empty$
  1085.     { "to sort, need author or key in " cite$ * warning$
  1086.       ""
  1087.     }
  1088.     { key sortify }
  1089.       if$
  1090.     }
  1091.     { author sort.format.names }
  1092.   if$
  1093. }
  1094.  
  1095. FUNCTION {author.editor.sort}
  1096. { author empty$
  1097.     { editor empty$
  1098.     { key empty$
  1099.         { "to sort, need author, editor, or key in " cite$ * warning$
  1100.           ""
  1101.         }
  1102.         { key sortify }
  1103.       if$
  1104.     }
  1105.     { editor sort.format.names }
  1106.       if$
  1107.     }
  1108.     { author sort.format.names }
  1109.   if$
  1110. }
  1111.  
  1112. FUNCTION {author.organization.sort}
  1113. { author empty$
  1114.     { organization empty$
  1115.     { key empty$
  1116.         { "to sort, need author, organization, or key in " cite$ * warning$
  1117.           ""
  1118.         }
  1119.         { key sortify }
  1120.       if$
  1121.     }
  1122.     { "The " #4 organization chop.word sortify }
  1123.       if$
  1124.     }
  1125.     { author sort.format.names }
  1126.   if$
  1127. }
  1128.  
  1129. FUNCTION {editor.organization.sort}
  1130. { editor empty$
  1131.     { organization empty$
  1132.     { key empty$
  1133.         { "to sort, need editor, organization, or key in " cite$ * warning$
  1134.           ""
  1135.         }
  1136.         { key sortify }
  1137.       if$
  1138.     }
  1139.     { "The " #4 organization chop.word sortify }
  1140.       if$
  1141.     }
  1142.     { editor sort.format.names }
  1143.   if$
  1144. }
  1145.  
  1146. FUNCTION {presort}
  1147. { calc.label
  1148.   sort.label
  1149.   "    "
  1150.   *
  1151.   type$ "book" =
  1152.   type$ "inbook" =
  1153.   or
  1154.     'author.editor.sort
  1155.     { type$ "proceedings" =
  1156.     'editor.organization.sort
  1157.     { type$ "manual" =
  1158.         'author.organization.sort
  1159.         'author.sort
  1160.       if$
  1161.     }
  1162.       if$
  1163.     }
  1164.   if$
  1165.   *
  1166.   "    "
  1167.   *
  1168.   year field.or.null sortify
  1169.   *
  1170.   "    "
  1171.   *
  1172.   title field.or.null
  1173.   sort.format.title
  1174.   *
  1175.   #1 entry.max$ substring$
  1176.   'sort.key$ :=
  1177. }
  1178.  
  1179. ITERATE {presort}
  1180.  
  1181. SORT
  1182.  
  1183. STRINGS { longest.label last.sort.label next.extra }
  1184.  
  1185. INTEGERS { longest.label.width last.extra.num }
  1186.  
  1187. FUNCTION {initialize.longest.label}
  1188. { "" 'longest.label :=
  1189.   #0 int.to.chr$ 'last.sort.label :=
  1190.   "" 'next.extra :=
  1191.   #0 'longest.label.width :=
  1192.   #0 'last.extra.num :=
  1193. }
  1194.  
  1195. FUNCTION {forward.pass}
  1196. { last.sort.label sort.label =
  1197.     { last.extra.num #1 + 'last.extra.num :=
  1198.       last.extra.num int.to.chr$ 'extra.label :=
  1199.     }
  1200.     { "a" chr.to.int$ 'last.extra.num :=
  1201.       "" 'extra.label :=
  1202.       sort.label 'last.sort.label :=
  1203.     }
  1204.   if$
  1205. }
  1206.  
  1207. FUNCTION {reverse.pass}
  1208. { next.extra "b" =
  1209.     { "a" 'extra.label := }
  1210.     'skip$
  1211.   if$
  1212.   label extra.label * 'label :=
  1213.   label width$ longest.label.width >
  1214.     { label 'longest.label :=
  1215.       label width$ 'longest.label.width :=
  1216.     }
  1217.     'skip$
  1218.   if$
  1219.   extra.label 'next.extra :=
  1220. }
  1221.  
  1222. EXECUTE {initialize.longest.label}
  1223.  
  1224. ITERATE {forward.pass}
  1225.  
  1226. REVERSE {reverse.pass}
  1227.  
  1228. FUNCTION {begin.bib}
  1229. { et.al.char.used
  1230.     { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
  1231.     'skip$
  1232.   if$
  1233.   preamble$ empty$
  1234.     'skip$
  1235.     { preamble$ write$ newline$ }
  1236.   if$
  1237.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  1238. %  "\begin{thebibliography}{xxxxx}" write$ newline$
  1239. }
  1240.  
  1241. EXECUTE {begin.bib}
  1242.  
  1243. EXECUTE {init.state.consts}
  1244.  
  1245. ITERATE {call.type$}
  1246.  
  1247. FUNCTION {end.bib}
  1248. { newline$
  1249.   "\end{thebibliography}" write$ newline$
  1250. }
  1251.  
  1252. EXECUTE {end.bib}
  1253.